#include <iostream>
#include "toolkit.h"
#include "commandline.h"
#include "debug.h"
#include "json/jsonvalue.h"

using namespace std;

std::string confPath = ".ssh_conf.json";
JsonValue jsonConf;

/// NIP name@ip
void exec_cmd(const std::string &NIP, const std::string &password)
{
    std::string cmd ="terminator -e \"sshpass -p " + password + " ssh " + NIP + "\"";

    INFO_TIP("正在使用命令: " << cmd);
    if(std::system(cmd.c_str()) == 0) {

        if(jsonConf.find(NIP) != 0) {
            jsonConf[NIP]= std::string(password);
            ytool::write_file(confPath, jsonConf.write());
        }
    }
}

void new_user()
{
    INFO_TIP("Enter username:");
    std::string userName;
    std::cin >> userName;
    INFO_TIP("Enter userIP:");
    std::string userIP;
    std::cin >> userIP;
    INFO_TIP("Enter password:");
    std::string password;
    std::cin >> password;

    exec_cmd(userName + "@" + userIP, password);

}

void exist_user()
{
    auto keys = jsonConf.keys();
    for(int index = 0; index < keys.size(); index++) {

        INFO_TIP(index << ": " << keys[index]);
    }
    INFO_TIP("你可以选择编号来确定使用哪一个帐号！");

    int index;
    std::cin >> index;

    exec_cmd(keys[index], jsonConf[keys[index]].to_string());
}


int main(int argc, char** argv)
{
    ytool::CommandLine yc;
    yc.insert("e", "使用已有用户");
    yc.insert("i", "注册新用户");
    yc.insert("s", "展示已有用户");
    yc.insert("explain", "不带参数，如果没有已注册用户，那么直接注册，否则使用已有用户");
    yc.parse(argc, argv);

    auto str = ytool::read_file(confPath);
    if(str.empty()) {
        str = "{}";
    }
    jsonConf.read(str);

    std::string value;
    if(yc.get_value("s", value) == 0) {

        INFO_TIP("展示已有用户: ");
        INFO_TIP(jsonConf);
        return 1;
    }

    if(yc.get_value("e", value) == 0) {
        exist_user();
        return 0;
    }

    if(yc.get_value("i", value) == 0) {
        new_user();
        return 0;
    }

    if(!jsonConf.object().empty()) {
        exist_user();
    }
    else {
        new_user();
    }

    return 0;
}
